{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 27.62925851 -10.63955647  -0.22590565] [[ 0.09004797 -0.01373836  0.00029333]\n",
      " [-0.01373836  0.16670119  0.00058178]\n",
      " [ 0.00029333  0.00058178  0.00523888]]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1924c061a20>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "temp_max = np.array([17,  19,  21,  28,  33,  38, 37,  37,  31,  23,  19,  18])\n",
    "temp_min = np.array([-62, -59, -56, -46, -32, -18, -9, -13, -25, -46, -52, -58])\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "months = np.arange(12)\n",
    "plt.plot(months, temp_max, 'ro')\n",
    "plt.plot(months, temp_min, 'bo')\n",
    "plt.xlabel('Month')\n",
    "plt.ylabel('Min and max temperature')\n",
    "\n",
    "from scipy import optimize\n",
    "def yearly_temps(times, avg, ampl, time_offset):\n",
    "    return (avg\n",
    "            + ampl * np.cos((times + time_offset) * 2 * np.pi / times.max()))\n",
    "\n",
    "res_max, cov_max = optimize.curve_fit(yearly_temps, months,\n",
    "                                      temp_max, [20, 10, 0])\n",
    "res_min, cov_min = optimize.curve_fit(yearly_temps, months,\n",
    "                                      temp_min, [-40, 20, 0])\n",
    "print(res_max, cov_max)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x1924c098f60>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nzVHi5IwzotDiL34RZeslbylxSMNluuXqokVwxRWRLAYPjtpRF10U32DvvTeSh6Zu5rdhw6K7MFvd\nh+utF2MhFRUwZQr85CfRZbnTTlG1d9y4qJ0leUVdVdIwmRTUmzYtVhePHRvVWfffP7qjhg6NRXsi\nNX32Gdx2G1x3XXRldukSr7Xhw2NcRHJGCwCVOHJrXX3d334bJbv/9reYWVNSEjvdnX569GeLrEtl\nZRRbHD0aHnssWrZDhsBpp6l1miMa45Dcqm8WzezZsRistDRWDy9YEGMY8+fD9dcraUj6WrSIEjKP\nPhqLC886C55/PkqbbLddbMX75ZdJR9ksKXFIw6xtA6KLLorieI8+Cu+/H7vPdejQdLFJ8dlyyxgf\nmzs3urHWX796MH3EiNhTRJqMEoc0zMiRsY91bQcdBO+9F10Mhx6qhXqSXe3bx+6Mr74ax5FHxlTu\nHXaImmX33BPdpJJTeldL5hYsiJZEmzbV5zbeOAbGn3oKttoqudik+dh992h9zJ8Pf/5ztEaOPjrG\n2S65BD7+OOkIi5YSh6THHSZNipW+vXrBpZfGTnqPPx7rMhYvjkKDIk2tY0c455z4MvPoo7DzzlEA\ns2dPOOooeO45rUzPMiUOWbuvvoqWxG67xaY948fHrJb334+fBw5Ud5Tkh6pCio89Vj229u9/xwys\nHXaI6b1LlyYdZVHQO17qNn16DDp27RoreVevjjfe/Plw9dWxiE8kX/XuHeXc58+PMZB27eILT7du\nMSX8nXeSjrCgKXFIteXLY0e9vfeOlbu33gpHHBFdVK+/Dr/8ZcxmEWkKmVYmqEv79nDSSbEqffLk\nWHR6000xnbd/f7jvPg2mN4AWAEoUnLv55hhoXLwY+vaNgnMnnqjNkSQZmVQmyNTChdEKuf76WHdU\n1ao+5RTYfPPG3XeB08pxJY61++KLqAN0663wyivQqhUcfni0KvbfX6tyJVnZqsK7NqtXx3jI6NEx\nfbxVq5jee+qpsN9+zXLsTolDieO7KiujAu2tt0Y5kBUrYqHeSSfFt7guXZKOUCS0aFH3TCizeB1n\n2wcfRAvkllvg888jQR1/fBx9+2b/8fKUEkdzThzl5bEj25w5MSVxxIiYTXLHHXGuQ4eYVnvSSTFb\nSq0LyTdN0eKoy7Jl8NBD8V6ZMCGS1J57RgI5+uiY+lvECi5xmFkP4A5gM6ASGOPu15jZJsDdQCnw\nEfATd1+ytvtq1omjrr5hiORw8MGRLIYMiVkmIvkql2Mc6VqwICo63347vPlmVHIePDhqsP3wh0U5\nUaQQE8fmwObu/pqZbQBMBYYCPwMWu/soMzsP2Njdf7u2+2q2iWPePNhxR1hSR17t3j1W1ooUitot\n55Ejk9s2+I03ohUydiz8978xW2vQIPjxjyOZbLBBMnFlWcEljtrM7GHg76ljf3dfkEouz7n7Wmta\nNJvE4R7fhB5+OI6pU+u/ba76hkWak9WrY5uA++6D+++PsiZt28ZC2COPjJZIAXdnFXRZdTMrBXYB\nXgG6uPsCgNRl5+Qiy4LGzk1fvjzqQZ15ZlQM3WknuPjiqBs1alRMLazL2qrZijRXmb4fW7aMGVfX\nXhst+IkTYxZWRUXsN9O5c6yDGjkyNjDL0y/mjebueXUA6xPdVEekrn9e6/dL6vl3w4EKoKJnz56e\nl+66y72kxD1eTnGUlMT5+qxe7f7aa+5XXOE+YIB727bx79q2dR882P2mm9wXLGjcY4g0R9l8r6xe\n7f7qq+6XXOK+++7V99e1q/vJJ7vfeaf73LnZfw5ZBlR4Gp/TedVVZWatgUeBJ939qtS5GRRLV1U6\nM0W++QZeey2awy+/DC++GAuWIKbOHnRQHPvtF/s11yWf+oZF8lUuZ2598gk88UTUc3vsMfj66zjf\nqhXss08sNtx33xh7zKNZjQU3xmFmBtxODISfWeP8lcBnXj04vom7n7u2+8rbxFHf3HSA3/42EsWU\nKbG+AqIrql8/GDAgjvq6oUQkc02xVqS8PJLE8uV1/75LlygPv/vusMcecZngGEkhJo59gBeBN4np\nuAAXEOMc9wA9gTnAUe6+eG331aDEkctv6d9+G99g+vWrbj3U1ro17Lpr9I/26xeXzbz8gUhONcVa\nkfoeY7PN4He/i82opkyJzc+qPou7d4dtt416WttuG0efPrDppjlvnRRc4simjBNHXXPG27ePOeM/\n/el3b19ZGV1KX34Zq0y/+CKOJUtilsX8+dWX8+bBrFkxG6MubdrEVqtnnx2zM0SkaTTFWpF0WzVf\nfhmzIqdMiZmS77wTNeRqtlRKSiKplZbGZdeu0KlTJJSqy002iU3VGrhOS4kjk8RR37cCiA/zNm3i\ng3/Vqmg9rOv/rG3b+KN26xZH795RtqBPn5gPPmpUzMjQ+INIsnI9HtiYVk1lZdzmnXfgP/+J+/no\no+rLxfV0vJxzTuyI2ABKHJkkjrWNPZx7brQuWrVa82jTBjbcEDbaKEp4VF127RpZP48GvEQkIbls\n1XzzDXz2WXR/L1oUl59/HouA99qrQXeZbuJo1aB7LzY9e9b/reCKK5o+HhEpDlXJIRetmjZtYhw0\ngbHQvFwA2ORGjoxvATWVlMR5EZHGGDYsupaqup6KoGtaiQPiDzlmTLQwzOKyKYupiYgUEHVVVRk2\nTIlCRCQNanGIiEhGlDhERCQjShwiIpIRJQ4REcmIEoeIiGREiUNERDKixCEiIhlR4hARkYxknDjM\nbD0za5mLYEREJP+tM3GYWQszO87MxpvZp8B7wAIze9vMrjSzPrkPU0RE8kU6LY5ngd7A+cBm7t7D\n3TsD+wKTgVFmVsduRyIiUozSqVU1wN2/rX0ytX3r/cD9ZtY665GJiEheSqfF0cvM+tU+aWb7mllv\ngLoSi4iIFKd0EsdfgaV1nF+e+p2IiDQj6SSOUnefXvuku1cApVmPSERE8lo6iaPdWn7XPluBiIhI\nYUgncUwxs1NqnzSznwNTsx+SiIjks3RmVZ0JPGhmw6hOFGVAG+DwXAUmIiL5aZ2Jw90/AfY2s/7A\n9qnT4939mZxGJiIieSntPcfd/VliMaCIiDRjKnIoIiIZSadW1V5m1qEpghERkfy31sRhZpcDnYAb\nmyYcERHJd+tqcbwE7AnMbIJYRESkAKx1cNzdnwCeaKJY1srMBgLXAC2Bm919VMIhiYg0SwUxOJ7a\nOGo0MAjYFjjWzLZNNioRkeYpncFxy8ZtGmkP4AN3/9DdvwHGAUNy/JgiIlKHtDZyMrMzzKxnzZNm\n1sbMDjCz24ETcxPe/9cNmFvj+rzUORERaWLpLAAcCJwM/NPMtgA+JwoftgSeAq5299dzFyIAdbVo\nfI0bmA0HhgP07NmzjpuLiEg2pFNyZAVwHXBdaqe/TYHl7v55roOrYR7Qo8b17sDHNW/g7mOAMQBl\nZWVrJBUREcmejAbH3f1bd1/QxEkDYArQx8y2MLM2wDHAI00cg4iIkEGtqiS5+yozOx14kugiu8Xd\n3044LBGRZqkgEgeAuz8GPJZ0HCIizV3aXVUWfmpmF6Wu9zSzPXIXmoiI5KNMxjiuA/YCjk1dX0os\nyhMRkWYkk66q77v7rmY2DcDdl6QGqkVEpBnJpMXxbar0hwOYWSegMidRiYhI3sokcVwLPAh0NrOR\nwETgjzmJSkRE8lZaXVWpWlQvAFOBA4mV3EPd/d0cxiYiInkorcTh7m5mD7n7bsB7OY5JRETyWCZd\nVZPNbPecRSIiIgUhk1lV/YFfmNls4Guiu8rdfcecRCYiInkpk8QxKGdRiIhIwUi7q8rdZ9d15DI4\nkWJSXg6lpdCiRVyWlycdkUjDpN3iqCo1Upu7X5a9cESKU3k5DB8Oy5bF9dmz4zrAsGHJxSXSEJkM\njn9d41hNdF2V5iAmkaJz4YXVSaPKsmVxXqTQpN3icPf/q3ndzP6C9sQQScucOZmdF8lnGW3kVEsJ\nsGW2AhEpZvXtZqxdjqUQZVJW/U0zm5463gZmEGVIRGQdRo6EkpI1z5WUxHmRQpPJdNzBNX5eBXzi\n7quyHI9IUaoaAL/wwuie6tkzkoYGxqUQZdJVNaLGNNz5qe1cr8hZZCJFZtgw+OgjqKyMy1wkDU35\nlaaQSYvjIOC3tc4NquOciGSBO3z+OXz8cVwuXw4rVsCqVdC+fRzrrQddusBmm8Hdd2vKrzSNdSYO\nM/slMALY0sym1/jVBsDLuQpMpLlwh1mz4NVX4a234njnHZg7NxJFOlq0ADNYvXrN81VTfpU4JJvS\naXGMBR4H/gScV+P8UndfnJOoRIrcggXw6KPwzDPw4oswf36cb9kSttoKdt4ZhgyBbt2ga1fo0KG6\nldGyZSSUZcvgq6/gk09g3jy4/PK6H2v27PjdoEGw226RYEQaw9w9/RubbQz0AdpVnXP3F3IQV6OU\nlZV5RUVF0mGIrGHOHBg7Fh56CF55Jc517Qr77Qf77gv9+sHWW0Pbtg27/9LSSBK1tW4d3Vvu0L07\nDB0KP/5xPGaLxkzIl6JjZlPdvWxdt8tkOu7/EJs5PQlcmrq8pKEBijQHy5fDXXfBgAHxwX7++dGd\ndPnl8MYb0VL45z9hxAjYaaeGJw2of8rvrbfCp5/CbbdBWRn84x+w//7Qp0/EoUWIkjF3T+sA3iRa\nGq+nrm8N3J3uv2/KY7fddnORJM2f737BBe4dO7qD+xZbuF9yifuHH+b2ce+6y71XL3ezuLzrru/e\n5quv3O+80/2AAyK2Fi3cjzjCfeJE98rK3MYn+Q2o8DQ+Y9PuqjKzKe6+u5m9Dnzf3Vea2evuvnNu\nUlrDqatKkjJzZnzzHzs2WhZDhsCvfgU/+EF+dgvNmgVjxsCNN8KSJbD77tEqGjpUYyHNUda7qoB5\nZtYBeAiYYGYPAx83NECRYjJzJpxwAmyzDdx7L5x2GnzwATz4IPTvn59JA2CLLeBPf4oZXKNHR/I4\n4gjYdVd45JEYFxGpLa2Xs5kZ8Ct3/9zdLwF+D/wDGJrD2ETy3sKFMT6xzTZw333wm9/Et/i//hW2\nLKBKbuutF8/j3Xfh9tth6dJoLe25J7ysSfdSS1qJI9X39VCN68+7+yPu/k3OIhNpIg1Zbb1yJfzl\nLzHAPGZMfOjOmgVXXhkL8gpVq1bRcnrvvRhEnzcvZnsdd5wG0aVaJg3oyWa2e84iEUlA1QZLs2dH\nt0zVauu1JY8nn4TttoNzzokP1TffhL/9rbATRm2tWsHJJ8OMGfD730eX29ZbwyWXpL8oUYpXJomj\nP5E8/pOqkPtmrZXkIgUnkw2WFi6En/4UBg6MD9YnnoDx46Obqlitvz5cdlm0QA47DC69FHbZBSZO\nTDoySVImiWMQsf/GAcCPiGq5P8pGEGZ2pZm9l0pID6YG4at+d76ZfWBmM8zskGw8nkiVdDZYcoc7\n7ogEcc89cNFFsQbjkGb0auzVC8aNi2S5fHksHhwxAr78MunIJAmZJI45wL7Aie4+G3AgW43zCcD2\n7r4jMBM4H8DMtgWOAbYDBgLXmVnLLD2myDo3WPrkExg8GE48Efr2hWnT4lt3YxbqFbJDDolaWmee\nCTfcEF12Tz+ddFTS1DJJHNcBewHHpq4vBUZnIwh3f8qr9/aYDHRP/TwEGOfuK919FvABsEc2HlME\n1r7B0iOPwA47RD2pa66J7pnttksmznyy/vpw9dUwaVL8fNBBcNZZMWFAmodMEsf33f00YAWAuy8B\n2uQgppOJoooA3YC5NX43L3VOJCuGDYtZUb16xYK3Xr3g2mvhhReqiwxOnRqL+PJ1LUZSvv/9+L8Z\nMQKuugr22APefjvpqKQpZPJW+DbVTeQAZtYJqEz3H5vZ02b2Vh3HkBq3uZDYXbBqTktda1frXJJk\nZsPNrMLMKhYuXJhuWCJrbLA0fnxMs73pJjj3XJg8GbbdNukI81dJSSwc/Ne/ouLvbrvFKnQtHCxu\nmWzkdC3wINDFzEYCPwZ+l+4/dvcBa/u9mZ1IDLgf6NV1UOYBPWrcrDv1rFZ39zHAGIiSI+nGJVJl\n7Fg45ZTofnn6aTjggKQjKhyDB8e05BNOgFNPhZdeguuvj4WFUnzSbnG4ezlwLvBH4sN7qLvfm40g\nzGwgsZPgYe5ec3LkI8AxZtbWzLYgSrq/mo3HFKmyciWcfnq0PHbdNQbAlTQy16ULPPZYrPW4665Y\ndT5jRtJRSS5kUla9HfBDYAAxJXdg6lw2/J3YUXCCmb1uZjcAuPvbwD3AO8ATwGnuvrr+uxHJzJw5\nsR/G6NExwPvMM7FHhjRMy5Zw8cUxbXfBgiia+OCDSUcl2ZZJddx7iJlUd6VOHQts7O5H5Si2BlN1\nXEnHSy/B4YfHSujbbovifpI9c+fCUUfFplWXXx6LKlVxN7+lWx03kzGOrdx9pxrXnzWzNzIPTSR5\nt98epUV69YqB3a22Sjqi4tOjBzz3XIwb/f73MePqllti+1spbJnMqppmZntWXTGz7wMvZT8kkdyp\nrITzzoOf/Qz22SdmTSlp5E67drHqftQouPvu6Bas2l9dCldG6ziAl83sIzP7CJgE/EA1q6RQfPVV\ndEddcUXM/HniCdhkk6SjKjyZVhM2g9/+NvZaf++9GPdQT3Jhy6SramDOohDJsQUL4Ic/hOnTo5Lt\naaepv70hqqoJVxWGrKomDDErbW0OOyz29vjRj2JHxHvvjb+JFJ60B8cLiQbHpaYZM6LG0qJF8WE1\naFDSERWu0tJIFrX16hWLKNPx3//CoYdGocgbboD/+Z9sRiiNkfWtY82sLFW59jWVVZdCMWkS7L13\nVHR97jkljcZKp5rwumy2WfwtDjooBs4vvlgrzQtNJl1V5cA5wJtkUGpEJCn/+hccfXTUm3riCejd\nO+mICl/PnnW3OOqrMlyfDTaIIpK/+EXs9zFnTtQMa906O3FKbmUyOL4wtV3sLHefXXXkLDKRRrjp\nJhg6FLbfPtZrKGlkx9qqCWeqdevYnvbii2MdzZAh391US/JTJonjYjO72cyONbMjqo6cRSbSAO6x\n2Gz48BjXeOYZ6Nw56aiKR13VhMeMWffAeH3MokTJjTdGq3DgQPjii6yGLDmQSVfVScDWQGuqu6oc\neCDbQYk0hHtUtP3LX6LY3s03q+sjF4YNa3iiqM/w4bDRRrE1b//+sa97p07ZfQzJnkwSx07uvkPO\nIhFphMrK2BfixhujYOE112j/jEJz9NGw4YZw5JGxNe2ECbH6XPJPJm+tyamtXEXyyqpVsbXrjTfG\nqvBrr1XSKFSDBkVrY8EC6NcPZs5MOiKpSyZvr32A181shqbjSr5YuRJ+8pMo4/3HP8Kf/qSFfYVu\n333h2Wej+OQ++8R6D8kvWjkuBWvZsqhu+9RT0co444ykI5Js2XVXePFFGDAg9kaZMCHOSX7IpMUx\nB9gXODE1DdeBLjmJSmQdvvwyZk09/XRUXFXSKD5bbQXPPx87Mh54IEyZknREUiWTxHEdsBexDwfE\n3hyjsx6RyDp88UUkjcmTYdw4OOmkpCOSXNlyS3jhBdh442h9TJqUdEQCGVbHdffTgBUA7r4EaJOT\nqERSaldivemmSBoVFVF36qi820ZMsq1Xr2h5dO4MBx8MEycmHZFkkji+NbOWRBcVZtYJlR6RHKqq\nxDp7dqzRmD07yqFXVMB998XKcGkeevSI5NGtW3xxeO65pCNq3jJJHNcCDwKdzWwkMBH4Y06iEiG2\nGq1dgqKyMvbQGDIkmZgkOV27RsIoLY1y7E8/nXREzdc6E4eZtQJw93LgXOBPwAJgqLvfm9vwpDmr\nr+LqokVNG4fkj802i6m63/te7Ovx5JNJR9Q8pdPieLXqB3d/z91Hu/vf3f3dHMYlUm/F1UwrsUpx\n6dw5apBtvXW0PJU8ml46iUPLqSQRF1zw3RXgDa3EKsVl003h3/+GbbaJsS51WzWtdBYAdjKz39T3\nS3e/KovxiACwZElUXW3RAjp2jO6pnj0jaWS7wJ4Upk02iYRxwAHRbTV+fPwsuZdO4mgJrI9aHtJE\nFi+O3eHeegseflj7Ukv9OnasTh6DB8Njj8H++ycdVfFLJ3EscPfLch6JCGsmjQcfVNKQdevUKbqt\n+vePvcwffxz22y/pqIqbxjgkbyxZUp00HnpISUPSVzVg3rNnvG60SDC30kkcB+Y8Cmn2Pv88VgVX\ntTQGDUo6Iik0XbpE8ujWLV4/L7+cdETFa52Jw90XN0Ug0nxV1Z564w24/361NKThNt881nlsvnls\nQzt5ctIRFSdtdyOJ+vLLeIO/9lrUnho8OOmIpNB17RrJo3Pn+ELy6qvr/jeSGSUOSczSpdGlUFEB\n99yjMiKSPd26RfLYdNPoAp06NemIikteJQ4zO9vM3Mw2TV03M7vWzD5I7TqorVyKxFdfRZfUK69E\nafTDD086Iik2PXpE8th445h0MW1a0hEVj7xJHGbWAziI2DCqyiCgT+oYDlyfQGiSZV9/HdMmJ02C\nsWPhyCOTjkiKVc+ekTw22CD289A2tNmRN4kDuJoooug1zg0B7vAwGehgZpsnEp1kxbJlscp34sTY\nJ/wnP0k6Iil2paWRPNZbL3YSnD496YgKX14kDjM7DJjv7rW/D3QD5ta4Pi91TgrQ8uVw2GGxr8Id\nd8AxxySxlLQUAAAP2klEQVQdkTQXW24ZyaNdu0geb76ZdESFrckSh5k9bWZv1XEMAS4ELqrrn9Vx\nzus4h5kNN7MKM6tYuHBhNkOXLFixIorRPfMM3Hab6k1J0+vdO5JHmzZRokTJo+GaLHG4+wB33772\nAXwIbAG8YWYfAd2B18xsM6KF0aPG3XQHPq7n/se4e5m7l3Xq1Cm3T0YysmJFDH5PmAC33ALHH590\nRNJc9ekTm0G1bRvJQ91WDZN4V5W7v+nund291N1LiWSxq7v/F3gEOCE1u2pP4At3X5BkvJKZlStj\n8PuJJ+Dmm+FnP0s6ImnulDwaL/HEsQ6PES2SD4CbgBHJhiOZ+OYbOOqoqFg6ZgycfHLSEYmE730v\nkkf79pE8NNsqM3mXOFItj0Wpn93dT3P33u6+g7tXJB2fpGflykga//oXXH89nHJK0hGJrKlm8jjw\nQHj99aQjKhx5lzik8K1YAUccAY88AqNHw6mnJh2RSN16947kUVISyUOLBNOjxCFZtXx5lA557DG4\n8UYYoc5FyXNVyWP99ZU80qXEIVlTtbivavbU8OFJRySSni23jOSxwQaRPF57LemI8psSh2RFVe2p\nZ5+F22+Hk05KOiKRzGyxRSSPDTeM8iRKHvVT4pAGKy+Pcg5mUYX0xRejjIjWaUg2VL2+WrSIy/Ly\n3D9mzeRx4IEwZUruH7MQKXFIg5SXR1fU7NlxfeVKaNUKKiuTjUuKQ83Xl3tcDh/eNMmjtDSSx8Yb\nR/J48cXcP2ahMfc6K3gUtLKyMq+o0MzdXCotrU4aNfXqBR991NTRSLHJh9fX/PnRZTV7dmxnfMgh\nTfO4STKzqe5etq7bqcUhDVLXmxpgzpy6z4tkor7XUVO+vrp1i4KcW20Vkz4eeKDpHjvfKXFIxmbN\nim6puvTs2bSxSHGq73XU1K+vzp1jwkdZWWwBcOedTfv4+UqJQzLyzjuwzz5R56dt2zV/V1ICI0cm\nE5cUl5Ej4/VUU1Kvrw4d4Kmn4Ac/gBNOiEoIzZ0Sh6RtyhTYb78YrJw8Gf7xj+hzNovLMWNULl2y\nY9iweD3ly+tr/fVh/HgYPDgWtV55ZTJx5AsNjktannsu+nk7dYoFfr17Jx2RSNP79tuYbn733XDW\nWfDnP8d04WKR7uB4PT3VItXuvz++6fXuHUmja9ekIxJJRuvWMSV4003h//4PFiyAW2+NzaGakyLK\nlZIL114bVW533RVeeEFJQ6RlS/jb3+CPf4SxY6NiwpdfJh1V01LikDpVVsLZZ8Ovfx1bvv7739Cx\nY9JRieQHMzj//NgG+fnnY+B8QTPaYk6JQ75j5Uo47rhoip9+Otx7b+xZICJrOvHE2HPm/fdh771h\nxoykI2oaShyyhsWLY4Xs3XfHwN+110bTXKQYZaMe1sCBMXnk668jeTz7bJaDzENKHPL/vfsu7LEH\nTJoUb6BzzokmuUgxymY9rLKyeN906QIHHxxTh4uZEocA8PjjsOeeUR79ueeiq0qkmF14YewhU9Oy\nZXG+IXr3juQxYAD84hdw5pmwalXj48xHShzNnHuMZQweHJvZvPoq7LVX0lGJ5F4u6mFttFGMeZx5\nJlxzTax9+uKLht9fvlLiaMZWrICTT47ZU4cfDhMnqtaUNB+5qofVqhVcfXV0Vz39dLTk33mncfeZ\nb5Q4mqlZs6Bfv5hOeNFFcM89sN56SUcl0nRyXQ/rlFNiwezixTF2OG5cdu43HyhxNEP/+lcs6Pvw\nQ3jkEbj00uIqmyCSjqaoh7X//rEF7c47w7HHwhlnwDffZO/+k6KPiyJU3xTDVavgggvgsMNiPGPq\n1OiDFWmuhg2LjaEqK+MyF0UUu3WLKbq/+Q38/e+xWHDu3Ow/TlNSraoiUzXFsGq2SNUUw08/hfvu\ng5dfjib0tddCu3bJxirSXLRuHZNQ9torxhV32QVuuinGFguRWhxFpr4phmedBW+/HbV1xoxR0hBJ\nwo9/DBUVsMUWcMQR8POfw9KlSUeVOSWOIlPfVEJ3eOON6GcVkeT07Rst/wsvjMkpO+8c6z8KiRJH\nkVnbFMNevZo2FhGpe8yxdWv4wx+iQGJlZeyqedZZUbakEChxFJmzzvpubamSkigBLSJNa11lTfbZ\nJ3oCTjkFrroKtt8+tqnNd0ocTSwbRdXqsmoVXHcd/O53kTg6dIjzSW+5KdKcpVPWZMMN4YYbYr+b\ntm2jyOjxx8MnnzRtrJlQ4mhC2SyqVtOECdFPetppsPvusUp1yZJ4jFxNMRSRdcukrMm++8Lrr8Pv\nfx/Vqfv0gVGjosJDvsmbxGFmZ5jZDDN728z+XOP8+Wb2Qep3hyQZY2Nlu6jazJmxJuPgg2H5cnjg\nAe0HLpJPMi1r0q4dXHYZvPUW9O8fm0Vts01UdnDPXZyZyovEYWb9gSHAju6+HfCX1PltgWOA7YCB\nwHVmVrC7Q2SrqNqHH8JJJ8G220Yl2yuuiFbG4YerDLpIPmloWZO+feHhh6PW1YYbwtFHR9mS8ePz\nI4HkReIAfgmMcveVAO7+aer8EGCcu69091nAB8AeCcXYaI0tqvbeezHvu2/fqHvzq1/FzmPnnht9\noyKSXxpb1uTAA6NkyS23wGefRRXrPfaIUkGVlbmNfW3yJXH0BfY1s1fM7Hkz2z11vhtQc3H+vNS5\n7zCz4WZWYWYVCxcuzHG4DdOQbx/usd/3oYdGk7W8PMYyPvwwZmF06ZLbmEWkcRpb1qRly+hhmDED\nbr4ZFi2CIUNg661h9OjYQ6epNVniMLOnzeytOo4hROmTjYE9gXOAe8zMgLo6XupsqLn7GHcvc/ey\nTp06ZRxfrmY71ZTJt4+PP46BsW22iY1hKiqiGOGcOVHnf/PNsx+fiOSv1q2jx2HmzOhx2GQTOP10\n6N4dTj0VJk9uwm4sd0/8AJ4A9q9x/T9AJ+B84Pwa558E9lrX/e22226eibvuci8pcY//9jjat4/z\nTenjj91vuMH9kEPcW7SIOPbZx/3WW92XL2/aWEQk/02a5P7Tn8bnFbj37et+xx0Nvz+gwtP4zM6X\nIocPAQcAz5lZX6ANsAh4BBhrZlcBXYE+wKvZfvC6ZjstXx7FyGbOjGlye+2V/f0qvv46Sg88/3x0\nR73ySqSt3r3hvPPgZz+LKXkiInXZc884Ro+OIqa33dY0ta/M82CI3szaALcAOwPfAGe7+zOp310I\nnAysAs5098fXdX9lZWVeUVGR9uO3aFF/E69Fi+ibbNUKdtghju22ixlNPXpA167QsWP9+1m4x6DW\nvHlxvPsuTJ8Ob74ZRQdXrYo+zN12ixLnQ4fG/Wt2lIg0hHvDPz/MbKq7l63zdvmQOLIt08RRWhqL\n8Wrr1Ss+5CdNilWdU6fG/Or589e8XevWMWWuXbs4zKLFsmxZDFx9++2at+/WLRLQLrtEbf6994YN\nNsj8eYqIZFO6iSNfuqoSNXLkmntYQPVspw03jBIAh9RYerhkSUyNnT8/BrE//jiahytWxLF6dXRr\ntW8fl127xgBWt27R9dSxY9M/RxGRbFHioHpW04UXxqylnj0jadQ3bW7jjWPMQ0SkOVLiSBk2TDWd\nRETSkS8LAEVEpEAocYiISEaUOEREJCNKHCIikhElDhERyYgSh4iIZESJQ0REMlKUJUfMbCFQRxGR\ntGxKFFgsBnou+alYnkuxPA/Qc6nSy93XuS9FUSaOxjCzinRqtRQCPZf8VCzPpVieB+i5ZEpdVSIi\nkhElDhERyYgSx3eNSTqALNJzyU/F8lyK5XmAnktGNMYhIiIZUYtDREQyosRRg5kNNLMZZvaBmZ2X\ndDwNZWY9zOxZM3vXzN42s18nHVNjmFlLM5tmZo8mHUtjmFkHM7vPzN5L/W0KdlcXM/vf1GvrLTP7\np5m1SzqmdJnZLWb2qZm9VePcJmY2wczeT11unGSM6arnuVyZeo1NN7MHzaxDth9XiSPFzFoCo4FB\nwLbAsWa2bbJRNdgq4Cx33wbYEzitgJ8LwK+Bd5MOIguuAZ5w962BnSjQ52Rm3YBfAWXuvj3QEjgm\n2agychswsNa584B/u3sf4N+p64XgNr77XCYA27v7jsBM4PxsP6gSR7U9gA/c/UN3/wYYBwxJOKYG\ncfcF7v5a6uelxAdUt2Sjahgz6w4cCtycdCyNYWYbAvsB/wBw92/c/fNko2qUVkB7M2sFlAAfJxxP\n2tz9BWBxrdNDgNtTP98ODG3SoBqorufi7k+5+6rU1clA92w/rhJHtW7A3BrX51GgH7Y1mVkpsAvw\nSrKRNNhfgXOByqQDaaQtgYXAralut5vNbL2kg2oId58P/AWYAywAvnD3p5KNqtG6uPsCiC9eQOeE\n48mWk4HHs32nShzVrI5zBT3lzMzWB+4HznT3L5OOJ1NmNhj41N2nJh1LFrQCdgWud/ddgK8pnO6Q\nNaT6/4cAWwBdgfXM7KfJRiW1mdmFRLd1ebbvW4mj2jygR43r3Smg5ndtZtaaSBrl7v5A0vE0UD/g\nMDP7iOg6PMDM7ko2pAabB8xz96qW331EIilEA4BZ7r7Q3b8FHgD2TjimxvrEzDYHSF1+mnA8jWJm\nJwKDgWGegzUXShzVpgB9zGwLM2tDDPY9knBMDWJmRvSlv+vuVyUdT0O5+/nu3t3dS4m/xzPuXpDf\nbN39v8BcM9sqdepA4J0EQ2qMOcCeZlaSeq0dSIEO9NfwCHBi6ucTgYcTjKVRzGwg8FvgMHdflovH\nUOJISQ0mnQ48SbwJ7nH3t5ONqsH6AccT39BfTx0/TDoo4Qyg3MymAzsDf0w4ngZJtZruA14D3iQ+\nRwpm5bWZ/ROYBGxlZvPM7OfAKOAgM3sfOCh1Pe/V81z+DmwATEi992/I+uNq5biIiGRCLQ4REcmI\nEoeIiGREiUNERDKixCEiIhlR4hARkYwocYg0gJm5md1Z43orM1vY0Aq+qcq5I2pc37/QqwFL8VLi\nEGmYr4Htzax96vpBwPxG3F8HYMQ6byWSB5Q4RBrucaJyL8CxwD+rfpHa3+Gh1J4Ik81sx9T5S1J7\nKDxnZh+a2a9S/2QU0Du1YOvK1Ln1a+zfUZ5apS2SOCUOkYYbBxyT2sRoR9asQHwpMC21J8IFwB01\nfrc1cAhRyv/iVF2x84D/uPvO7n5O6na7AGcS+8NsSVQEEEmcEodIA7n7dKCUaG08VuvX+wB3pm73\nDNDRzDZK/W68u69090VEMb0u9TzEq+4+z90rgddTjyWSuFZJByBS4B4h9qbYH+hY4/zayvSvrHFu\nNfW/D9O9nUiTUotDpHFuAS5z9zdrnX8BGAYxQwpYtI49UZYShelE8p6+wYg0grvPI/YSr+0SYre/\n6cAyqkt213c/n5nZS2b2FjHoPj7bsYpki6rjiohIRtRVJSIiGVHiEBGRjChxiIhIRpQ4REQkI0oc\nIiKSESUOERHJiBKHiIhkRIlDREQy8v8AAofuU0loi2cAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1924c147d68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "days = np.linspace(0, 12, num=365)\n",
    "\n",
    "plt.figure()\n",
    "plt.plot(months, temp_max, 'ro')\n",
    "plt.plot(days, yearly_temps(days, *res_max), 'r-')\n",
    "plt.plot(months, temp_min, 'bo')\n",
    "plt.plot(days, yearly_temps(days, *res_min), 'b-')\n",
    "plt.xlabel('Month')\n",
    "plt.ylabel('Temperature ($^\\circ$C)')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5/6"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy as sym\n",
    "a = sym.Rational(1, 2)\n",
    "b = sym.Rational(1, 3)\n",
    "a + b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAABsAAAASCAYAAACq26WdAAAABHNCSVQICAgIfAhkiAAAAV5JREFU\nOI3t1D9IVXEYxvGPJQ6NlmLQ6OCki6M4iCAILtrSpKBDYIgIIQSB23VQHBwEB3FxEARdgnAyKhAU\nHCRdUqQh3fIuBYleh/OKl+v906kLLr1whvO8z3O+v9/vvOdwT/UYI1jHV/xCFp8wjAfVhL1EDt+x\nggyWcB76GmqqBetCn7s7aMK3AA5UC1au3gRsvkDfDL2/QK/BcvSm08JeR3CuQG/DJQ7wME+fDf9i\nWlAt9iPcU6S/HL2huL85hVV/MVQzEX5Xov9MMrkneBXe96hLCxqL8CHqy/gy4cvhMx6lBY1G+Itk\nIsvVRB6sJS1oPIL7aKzgfYErnEZmIQ1oMkJ7eFLB24vfsagGyXFf+MPdvQ3QrvLvCDrwE8d4Gtrz\nyG8UC+T/fgYlY3wp+XizRfwn4WnDB8kUduAoz7ODdnTiY6mVTrl9yaWuLTTjDD/QWuQ53eHdLgX6\nX/9U17nrXOSlIFvkAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$2 x$$"
      ],
      "text/plain": [
       "2*x"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = sym.Symbol('x')\n",
    "y = sym.Symbol('y')\n",
    "\n",
    "sym.init_printing(use_unicode=False, wrap_line=True)\n",
    "x + y + x -y\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAANUAAAAaCAYAAAAg/hniAAAABHNCSVQICAgIfAhkiAAABKNJREFU\neJzt2lusHVMcx/GPFhEq1CVFEImikVYR0hdNRCSiIkJ4qAdZQnjggdQDItGXOm2kca+4RE7FS0kQ\nHlCtpKQ0lai7kJCD0B5tWndxrYc1zdlnd++zZ2bPzD5zOt9kcs5eM/u//r/f/GfPrLWGhoaGScVN\n+BA/J9s7uGSgGZXHHXhX1LkdL2PuQDOqL3X2svSavwyLcApOxTL8jTOK7GSS8BquFU/+PLyAbThi\nkEnVlDp7OZCa34kby+xgkjAD/+LSQScyBai7l+NqflqBgadjsWjQ2wXGTcsKrMe3+EMUugV348gS\n+jtU9G9nCbGLpmpvslInL1sprebn4Vf8g13irXEQ/IVNeArL8ZD43L4b3+GEgvtbIxbm9ILjlkHV\n3mSlTl5SQc0fiNk4B0PYId+gM4gn+fyceRzUpX1ZEndVzriduBdbRd1VENTHm6wU4WXQnz9ZyVTz\na8Xkrmhr3w/Dyb7lPTpchydzJBqUY8z8JO7rbe15ta7EKE7v0t+S5LtLuuw/DX/izR55txJU6w3Z\n/MmruZeXaQny+VPUuZqw5ueLA8ZPjb8Vr0w6fzxFom/gmRTHtROUUzh3JXFXtrXn0fqg3kWwIPn+\nc132rxUfG7LMFgXVekM2f/JoTuNlWoJ8/hR1rnrW/HDSUUg+35l8XmPviY3lWIiTxOfMIfyHi3sk\n0YmgmMK5DUtxH95KYn6AozscOyy91lXiusQFOKZlm9F23AH4Hd906O+qJP4DqdVEguq9Ib0/WTWn\n9TItQT5/8pyrXDV/vDhDNIKbk8Cvis+R7Qzja/EW+YN4G7yop5TOBMUUzrYkzp7tFczqcmwWrbu7\nbEs7HLsh2XdcS9sh4uzbKA5LLweD8YZs/mTRnMXLNAT5/cl6roblrPkhY0I34uAcyU7EiO7GdtqG\nc/QxC5fjc3yPs7scV4bWe+w9Hllh/K9+N0ZMHm9I708/mrMwolh/Cs97/y7t21v+v068RRbJ/Ti8\nre1McbV6tWhcK+/n6GNUXKl/D1/gaZ1naMrQujH5uwDPYw5uFV9pWd3ju5PJG9L704/mLBTtTyV5\nLxafEbeKV+ujRQXuQVDetOiWJPZRbe1laZ2ZxN2QfF4nDvrPyhkvqN4bsvlTtOYsBPn9KT3vReJC\n4Ufi4PUz8b2mOUV1MAFBeYUzmsSe2dJWttZP8Buu1v9aUFCtN+Tzp0jNWQj686e0vM8Tb+1f4dik\n7cqkkxeL6mQCgvzGzBFnj9qZZmyBc2NLexVaH0vi/SI+QvXzsmhQnTfk96dIzVkI+ruoSsl7Pn4U\nb/Mnt+3b8zrLwiI6moAgvzG3iL+i68X1kyHxlZwvk5hbja2HVKX1GmOD5ev7jBVU4w39+VOk5iwE\n/V1Uhec9W5xq3aXzIteFSWebiuhsAoL8xszFI+KgdIe4YPeTWARLjf3yVKl1YRJrs/gWQj8E5XtD\n//4UqTkLQX8X1aDybsjIS+KA99xBJ1IhddVc17z3KfYMeB8edCIVUlfNdc17n+BE3I4nxNX2jxW/\naD7ZqKvmuua9z3GD+Iu3C88a/9rLVKWumuuad0NDQ0NDQ0NDQ0NDw5Tnf5jBO0Qtl5+QAAAAAElF\nTkSuQmCC\n",
      "text/latex": [
       "$$x^{3} + 3 x^{2} y + 3 x y^{2} + y^{3}$$"
      ],
      "text/plain": [
       " 3      2          2    3\n",
       "x  + 3*x *y + 3*x*y  + y "
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.expand((x + y) ** 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nOP2VwKHKOfIAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$$- \\sin{\\left (x \\right )} \\sin{\\left (y \\right )} + \\cos{\\left (x \\right )} \\cos{\\left (y \\right )}$$"
      ],
      "text/plain": [
       "-sin(x)*sin(y) + cos(x)*cos(y)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.expand(sym.cos(x + y), trig=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$$\\Re{\\left(x\\right)} + \\Re{\\left(y\\right)} + i \\Im{x} + i \\Im{y}$$"
      ],
      "text/plain": [
       "re(x) + re(y) + I*im(x) + I*im(y)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.expand(x + y, complex=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAWCAYAAACCAs+RAAAABHNCSVQICAgIfAhkiAAAAZpJREFU\nWIXt1r9LlVEcx/FX1pQNuUWUm+RYYGhDoERzDbrc6U5OLWGgQ4h/QQTaEA0VODU0OAuSKYJCSQQO\nLXcOScohQvoxnCMdH73mPRefW3TfcDj3POd8z/P58Jzv9x7alMIwpvEaX/ATsy1VlMm6IH4bG1ps\npBoFDGbEDqEHJ2J8XSMdye+xuHCszqaX8A2LGYJyWcAHQdehpEaWYj9QZ+00TuJOU9KOidTIG3xF\n/wHrRnATj/CuBF0NkxrZwRou4nzyvBMP8BGT5UlrjI7CeDn26fGaxAWM4/Mf9qsJ5zltT+PcwgFz\nz/Jk7+dUYbxrpB8v0Yu7WMHzI+z3EGcLzy7jVoyvFebWG9DaEF34gVdxPI/vuNLEnlX55Tdl0BHL\nL2wJfzx9qOAGHuNtkyKOnaIRQhk+LRjYxP1SFWVSzBFCnozijJAfn0pVtJfbscG52F/zu0hs4l69\n4OvCWVwVrgbNUpWfI1P2V7q01Q4LnhMS/GrGi/8aKoLTmVYLyaEbE3giXArfC8n+zzEqfIUtvLD3\netKmzf/OL/5RXEVIeEfMAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$y + 1$$"
      ],
      "text/plain": [
       "y + 1"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.simplify((x + x * y) / x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEsAAAAaCAYAAAD/nKG4AAAABHNCSVQICAgIfAhkiAAAAztJREFU\nWIXt2E2MXWMYB/Bf6yMdI0ETCw0lTEo3qqEaiWLRlS4kwoKFnKrYKAndUAsSSYdEExIh2EwtSn2H\njUxsSsXnojJaSRMyCFPtosTHoBiL553ce8+ce+6Zc2bqLu4/ubn3fb7Pe57neZ/3MsAANXEOduEo\npjGBa2eZJ/9PQfUjzsQH2IdNYsMuxJFeii8koeHFjO4E43LMYEsX/g6xWfPCFfgX99WPq2/xBqZw\negHvIHZit0iU/diKJWUGx/EThhY0zP7AlSK7thfw/kifUazFZvyKu7oZWyWy6rkFD7MYmQj+uhPk\nD77ENzgpR/8LH+ZooyLjwNIc83aRdnsKnIyLB7sxR1+CscR7dB5BN8W25HNbF/7F+BPv5egvYSU2\n5uhTOJCjHcT53QL4DH8rbuxr8E8y0P5Wdqag62Rjpn5mrU+6r3Thj4tnuTRH35j0Hs/Rd+P9HO0R\nbZnVjuFkfKIkwLHkKEvr7Wm9x9wsrYJM/c06Bb/j2wLezcnukwW8MxLvkxx9HY7jQYwkGz/r0rNW\nJSPjJQGeK4a1SXFSzOAdnFqiU4ZMs561N+mvaKMN4zv8KDamCNM4XEDfhM9Foz+Ee3Q5Da/SypIy\njCa5GTGXnNZDfhaTbXpVPmMVbO4wt48+pjP7i/C9qKJ5oX2Cn07fy3roHG37vUWUQhU8IabkdlyG\nG8QVYzLH21/B5uwQuR6v4xLcK061XSV6Q1rPWwsrxBvZVyJzixgtppLsM00cal6GZ6V49qb1u+IQ\nWluiszTpfFXTJ6I2j+jMnHZcL2aRCZwt5pXj4m3WRab5nHUAv+HWZOvpHvKrk9xrDXyCV5OhkRz9\nalFuX4ubOdyUZN9s4C/TfLOeTTZ+ES96eQ/5zUl+awOfiDKb0XlcrhHXnylclJP/NMlvqOkv03yz\nbtM6FO6oIP+iaO7nNfCJGAEO4+O0HknrY+YOd7QGvI9q+ss036wNWnNT6aVXjBLTmlVDBx5Izsua\nZD/hLdHU11WQvVuzSpiDZeKi+fZCGVxEzDb1pyrIDuEH0ZcXFNfgIf35599K3I/nxUX5C9UG49V4\nGBcsVmD9iDtFNh3DyzqvOgMMMMAAAyT8B/Hd1ItUyBvsAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$\\left(x + y\\right)^{6}$$"
      ],
      "text/plain": [
       "       6\n",
       "(x + y) "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.powsimp((x + y)**6)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD0AAAAVCAYAAAD1neayAAAABHNCSVQICAgIfAhkiAAAAw5JREFU\nWIXt1k+I1VUUB/BPFuZgYGILodJHTdpqLIqIKFKKBqJFuBOiDNuEReAuKRJaFGIUhJtWUyAmNBQI\nEQNl9NdqioHoz6omlEZM0xKarMnX4twf/ubnvb83NA8cwi887vudv/fcc849lwtYMHgNR7F0HjZu\nQhdb2oQ6SWhkHo76gZtxBtv6YOtNTOGykkDHwgh6DCcx0Adbt4iYtpcEOs5/0GtEll/po83v8BMu\nbjJ2iIBzv81JZjNG8QOm8Ts+xgMFZx1nD7GD13EMf2Ic92V0nk86dxVsjiX+xgb9ouSnm2zU8Uyi\nDzeNrcdLiTkhDqH63ZBkpvFlMv6cyMbhpPNsZoOdxDsgLqWDeBGvisD/wYaGzjhmlC+wdUnvW7Mz\n90LylauQuxNvV85gtcmRgsNrM7TFeBd/48qCva447TqGE/3tGm2pCPjrgv8KI2ZX4Pb0vQ+LMvLL\nEv/znLFqkyM9nDaxMek9WLA3KdNPos+O1b7XJPmxHv6uElU3iceSzjsiASVM40j1kTuZElZhN77H\nH85mcTTxm5muMCFKsolDWF77XpHWEz32cVi04mq8jE/Ewf/VovMrrqg+LunhoMI1ojyW40ORjd9E\nMB08hEsLuicL9BmzD306rUvmsJ9fav+3iCS0YaBmf85BbxOZeNi55b9JBD1fHE3rilap8LdLlOtK\nPIFHW+QX4XL8WCdUqEow13+DaR3N8O7sscm5YkpkcG2LzL3i9v8GQ6LVHsH1LTprxUibqAj1oE+I\nHl2VUZxM6/oGfTg57Qe6+ED03mCGfzveED19jzigp0W1NmdzHbem9UBJ4FPxItojxsxT4kSHcFrM\n1z3YKcbNGfHo6IqZXkdH+zR4P/Hr2JRoWxv0deJumHLu6Pwi6dxR8LNX3B9XF/gGsR/HRUD1eXgb\n3hMVcQof4X6R/X4FvVj06meNPR1JfocydqrHx8EMb5m4wN4q7GHB4EkRxI19sPW49ipYMFgiHi77\n52lnAD+Le2AWcjf1+cYMvhJzf1w8cf8LrhP30E7lt8IF/K/xL0efzuzxDyFWAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$\\tan{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "tan(x)"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.trigsimp(sym.sin(x)/ sym.cos(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA0AAAASCAYAAACAa1QyAAAABHNCSVQICAgIfAhkiAAAAHZJREFU\nKJFjYKACCGFgYJjMwMBwmIGB4RMDA8N/BgaGJYQ0XYAq/MzAwHCdWE2ODAwMqgwMDIwMDAwOuDSx\noPH3EzKVgYGBgYkYRaOaBlwTeuQGQDEDAwODBJS2ZGBgWABlv2FgYChBN6SBAZJ0cOEH5LiMzgAA\n6XoX52TB9a4AAAAASUVORK5CYII=\n",
      "text/latex": [
       "$$1$$"
      ],
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.limit(sym.sin(x) / x, x, 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAAVCAYAAAAeql2xAAAABHNCSVQICAgIfAhkiAAAAzhJREFU\nWIXt10+IllUUBvDfOGWahQYZFVaLpqEMsiiEonYuykVEheQm+oMSZYtcBNo6K0taRBhlIG3KGslw\nIwOh/QNTpwL7s6gsA51KMkPKRh2nxTkfvr3ffeez/IyBfDYz73me+9z73nPPue/HaUw4vIafMe0k\nPK7HGB7syor+A9yAY1jaBa+3MYxzuuB1yjGIA5jaBa+5IuvLu+B1StEvsv1yFz2/wm70tgKTCqK5\nWIc9GBHHZBALaroFeB+/4RB2YhnOapj8drybfiPYi/fwcE33AHpyDSUMigzeWYv3YG1yT9e4N3Ap\n5jV4WoSjubC3sAJr8Bm2VHQrcoJ9WI1n8XnGtuDMmu/i5IZFJlu+27C9pt2Ra2hqanMwii9VMohV\nOUfppMxL7rmS4WwcwX5cXeBn5d8b0+QHXFjhz8BG5XoaEpt5QcH3/Mr/08RL7ywtsIK1Oc99+bw8\nn9cpn+LpyW8rmb2Q5GMdJn0ldYsLXL/Ixq5afAi/47wO3v3pPdhBN0uU1/dYkmM2YfI4Yw7hxxKx\nPQ2u7DDpUOr6Gvjdyc+oxJZmbC+exx2YWRjbOk1N9V3FU6kdw0c4u4N+jzhNbfg6Tc7tYPBN6ppq\ncGvyl9Xi9yY3mvwxbBZ3dgvXJvdOhzVwfDNPJFlECR8sEf8045c38KWMVzED80XJjOIXx2v/4hz7\nYYc1LBQbN5z61R30k1L/bYk80Rpfo/kzsE+5xpvwanrdlc894jN13zhj5uOwaIAzxR19xPgJuyrn\nWV8iq119doFvdfWb0uQ7f6/TXmxI7ona2FtF16+jdQvcVokNaO4hN+MPsbEXZezu1G8o6Fu4PzVL\nmgSLRMZG8CaexEvibt1c0T2TRj/hRawUGRjDB9q76wHRUQfEXbpKXC1j6V299xdm/JGax5z0GdZe\nZq0yvaXhvV4Xje2SBh7RWdeLI3dYdOJNYmeruEfU4kH8iS9EpqcUPB8SPxZ2iYztx6d4XHsznSw2\n6eNKrC9jv+Kagn/rA2VrgZsurrLxTsSEwTLxItd1wetR45+GCYUp4nbYeJI+U8WJHagTve3aCYGj\n+ET84Nkhmu6/wRWiX60U/eE0/rf4C2Yx6aXXHhECAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$\\cos{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "cos(x)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.diff(sym.sin(x), x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nuhL/A8Sgltfxn/8HAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$1 - \\frac{x^{2}}{2} + \\frac{x^{4}}{24} + \\mathcal{O}\\left(x^{6}\\right)$$"
      ],
      "text/plain": [
       "     2    4        \n",
       "    x    x     / 6\\\n",
       "1 - -- + -- + O\\x /\n",
       "    2    24        "
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.series(sym.cos(x), x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAAABHNCSVQICAgIfAhkiAAAAM5JREFU\nOI3N0rEyQ0EUxvEfJcMVWhoZ8Qpq75PnoDJ0Kl5BK0U67yAUiUYmpZGYoRDNuePOkXszYxS+5ps9\n5/x3Z3c//lC7uMIz3jHCOVpNUBsTzHGDU/RjfY+dOvA2hrqpfhb1y0XQfjSHWE29DUwxw7o0cBze\nw2cCX3GHNRxl8DD8oeYaj+GdDBbhLzVgWd/K4DKthM8zWO5YWKzN6lwVHIR3asCD8B9v0Lb8O97E\nd2T9KgDlqdXInfiO3EBD5GAP1xjjA0+4wHYT9I/1BRgnMa7SDNsAAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$0$$"
      ],
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.limit(sym.sin(x)/x, x, sym.oo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAYAAADoZO9yAAAABHNCSVQICAgIfAhkiAAAAZFJREFU\nSInt1TFIVWEUB/CfCSEtTSFBS1jQlFNbwnvhJBgVLjkFgVNTY1NTOeiSg+D0BpdwCSSUloYQhJYg\nyCEKoaGgQKlIUOw5fEd63e57ftfeENIfLtzznf/3P3/O+b57+Ucxhhm8wFc0MZ+xrx+7eNQtI6+i\n+DesVTAyEdx6t4zUcR49qFUwsoQv6D1s4WOF+DnehoFcnMQVLErj2cez0LlR4PegEbnJnAI1eR0Z\nD95oYX0wjL3xe6emgz+XY6KKkQV8R19JrhEatyK+F/Fjf07jr4z0SQd7oU3+DLawjjuht4zjuSZy\njVwNzngHzsPgNLGCE2Wk7Pa0wXVs42kHzueW99v4UbVITeeO9EpXdqmDxk38xMfQmq1qIsdIPfIT\nbfIjUrde45T0gdzBhW4bmZGuZ39J7rI0gvc4HWtjofckp/g16co1pNPdxLuWtakW7gfpn1TEIDal\ncQwUci9Dc+ggI/f9OuFlz3rwLkV8t7D/HD5hAxdL9Idj3+pBRnLxIATPdkvwsFiT/tT/cfSxB7Zz\nb7naAtEZAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$\\frac{1}{x}$$"
      ],
      "text/plain": [
       "1\n",
       "-\n",
       "x"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.diff(sym.log(x), x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAABgAAAAWCAYAAADafVyIAAAABHNCSVQICAgIfAhkiAAAAU5JREFU\nSInt1L1LHFEUBfCfGiys0lgIAUG3SJXFwk5JYxUbES3sEiwV/wAtBdfGWrAyjWCXUtJGUbBRRAMW\nYqe4hQqiouhavLeyjDus7CyI4IGBuR9zzr333Te8A3TgN4q4wR6+l4OfMpJ/xgbWMRhFunCWkfcZ\nc1EgFc0ZBYawhRWh6h1Moikj7zNu41NAD37hChONErjDZsJXwEHZSI7oL0oYTvibsBxj8xX+E+wn\ncg/QmVZRHg8xqaXCvxDJlxL5K/iX8M1WdlAN5Up/Rns62qtedtyLe8wgh1FcqnEGX4QLcyxsRAlr\naE3JH8SucNiHmPKKLSpE4pKw5221PkhD2j0oVryP47pegWoYw6OwISUsNpL8h7Dbe2jHf+EQvzaC\nvE8YxZHwh4QRoYs/WcnzuBDG0p2IbUeR/nrJczjFOb5ViQ9Ega16BT7wtngCl6dLWQXHdesAAAAA\nSUVORK5CYII=\n",
      "text/latex": [
       "$$x^{6}$$"
      ],
      "text/plain": [
       " 6\n",
       "x "
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.integrate(6 * x ** 5, x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAE8AAAAVCAYAAAAHIbMXAAAABHNCSVQICAgIfAhkiAAAA3FJREFU\nWIXt2F2IVVUUB/DfOGVOFqOQUWG9NA1loEQhGPXmQ/kQUSL1VokSZVFCgfaclWU9RBhlIBGUNZHg\nSwxE2geUHxXYx5OTBjO3nDIjaprUbg9rHzxz7zlzr3MPlMP84XLPXuu//2ftc9dea5/LDGZQgtdx\nFHM70LgedayuJKKzBDfgH6yvQOs91HBBBVpnBQZxHD0VaC0V2bexAq3/PfpF1r1SoeZ3OILuzDCr\nQvEMS7EDwxgX6T6IVQXcVfgIv2EMB7EB5xVwb8MHSW8cI9iDBwq496ErxVGEQZFJdzTYu7A9+Z5u\n8L2FK7C8RLNjrMFJsbh3sAnb8BV2N3A3pSBHsRXP4utk241zc9y1yV4T2ZTp7sW+gjj2pzjKGsUS\nnMK3cpmELek+RRm7PPmeK9HsCItwAsdwbYF/Ye56WQrkB1ySs5+DXZrrywHxg1xcoHtRw3iueHAH\nW8S7Pd3nnjTemMY7FO/I3uTf20J3SngxiT/aBvfVxF1b4OsXWTGUsx3AH5jfhnZ/0h5swVsoSsVh\nrEtz3sfsSeaM4ccy5+Ek0u7njdzcfcl2dYugiYdRR1+J/0jyz0vj9Wk8ghdwOxaUzM2yuqze5fGU\n02v5FOe34A+LrEZskzwO4a82bpphJHedLXS4jXm96btW4q+J4twrjhvP42fRHB7GI2LBe/CYqHEZ\nxtL3nDbiGM1dr8afLfg9Of1KMZXMu7LE35h5eczDCrH1T+EXE2vhZWnuJy1iuFscZ2qJv7UFf1bi\nH2rBmxLOpOZtU/7K06e55pXhtaRzZ87WJV7JRgtnBFbgb9FUFogz3AmT//DXpHu920ZcZ4x8t11U\n4M932xtTIN+bWLu6sTP5nsjZb9FcYjjdmW9tsA8or6k3ie05hEuTbWXi7yzgZ7g3cdZNwukIa0TW\njONtPImXRU36sIH7TArmJ7yEzSIT6vjYxK53XHS5AXHO2iKODPWknT8TEluyjgcb7EuSVk1zycjK\nzs0la3tTNIvLS/yVYJlI7aNia4yII8DKAu5dojb9LhrVNyLjGov9/eLlfEhkzTF8icdxYYHubPGw\nP8/Z+pLtVywumJMdgj8r8PWKRjFZZk4rbBAP47oKtB4yeVZOO8wRXXtXhzo9YvcMNDq6m7nTBifx\nhfiTYb9oZlPBVaKGbxb1cgYz+I/xLwMn9bMIjS9oAAAAAElFTkSuQmCC\n",
      "text/latex": [
       "$$- \\cos{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "-cos(x)"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.integrate(sym.sin(x), x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIYAAAAWCAYAAAAFH+TSAAAABHNCSVQICAgIfAhkiAAAAtpJREFU\naIHtmk+ITVEcxz9jaBKNMRtK/qxkWNAjZaEeqykJYcHKVkRkYTevpJHIwkYWekUWSpmyUBYURYp5\n5c9MST1CFixmRo0ajMXv3N57133n3nPePfe6OZ96ndf8zvc3v3fP757zO+de8HgsOAg8BSaAX8CG\nfMP57zgJzAIHUtRXgBngC3AHWG3qdC3wG5gCrgFngKWWAerYB1wGHgGTyA+5UQDfWXATidl48DT6\nMnAOuKdsz0ydHlHCY5ZBJaWm/s8UMEa6g+fSdxasANYAXY70z5Gbf2HYMEfjtF+1Y5ZBJeUEktG9\nwOEC+c6CD8A4ktAu9ONI0iwOG3SJ0a3aGcugkvIAeIv9j8/Lt2u2IXGfd6gPxrY7bNAlhidfSqod\nzUOvS4w+1U7bOPZ0TDCwLxzqf6h2UdjQLjG6gK3IVPTeMjBPZ5SA78hS6EpfV205bAgnxiBwEdnC\nlICryH5X53jW4FOkHYEpddK7FguQormG7BpMSaq/jtz4F4BbwFlgFcDcUMdB4Lj6/go5A9DxjsZ0\nlITPBn2LRprXYj1y09ouI0n1n4Bh4BKwX/3tPo2ZpIVeYBdSW3wkomJ1SBl3M4tL32lzFIn1kGP9\nDtXvMbAOmBcYomqMSWAEuA0sAwYsg/PYk0XhCbBdtRXgNU1HE7pdSVB09mv65EWVzu6ovHwnpYQs\nS28ibFXi49PpmwkOtuphQ7jGaCbIHtdnHbvVBxrPYrYgFwDgK3AqpAli+pmjb1f0IM+pam1iiIsv\nTm/iK5IhJDPLJiILKuir93qEZhRZ8v46ys3Qtys2IrFdaWOPiy9O30xV9V1pEuBpJdpjIsqAPuQV\nANuj4rx8p0Ha8Y0gY7zERLRXie4Cy/l3js93Iuuni1cAXPpOg7Ti6wE2I+/ZTGA4tvOBl7ROvf5F\nneJToXVMh6I66YrPaWATsqUZQJ7Z605BPcXgIVJsfgOeIEWqx+PxdMAfxvPohzB4qb0AAAAASUVO\nRK5CYII=\n",
      "text/latex": [
       "$$\\left\\{-1, 1, - i, i\\right\\}$$"
      ],
      "text/plain": [
       "{-1, 1, -I, I}"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.solveset(x ** 4 - 1, x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$$\\left\\{i \\left(2 n \\pi + \\pi\\right)\\; |\\; n \\in \\mathbb{Z}\\right\\}$$"
      ],
      "text/plain": [
       "{I*(2*n*pi + pi) | n in S.Integers}"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.solveset(sym.exp(x) + 1, x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ4AAAAXCAYAAAD6OvZrAAAABHNCSVQICAgIfAhkiAAABF9JREFU\naIHt2nuIVHUUwPGPuSWWlL3tYRRIaQ8q6AkVEklSSJRFJJhGQkFhokQaREtlaikYvQxLFtJ/Iuhl\nYGWRqRVp9jB7QA+xKCMKRcpqK/vj/KYdx5m7d3Zn9440X7jcmfs753fOnN/73KFFiyZkAt7FdvyN\nM4p1p8VeQDs6sRXP48R6KzgZ/2AHluBeDGucf03FoZiC5/AldorBtgY3Yp/iXGsqJmJXuqbUkBmN\nuViR5N6r18gtSXFqj1zcu7hZ/NbvsQxzxGDblp4/iwGFedccDBfx2CG745Xzvpi8htRj6K5kYEyd\nDu6NXIxx9pzZhmGLiMP4/naqiRiAlfgKD8rf8ZYl2eGVBVlLyMB078yQeTVVfFUVRztS2dwcDhbN\nG3hJjM5ytmJR+jy6Px3KYIaI64wa5SfhD7zVQJtTxeC8Ab/WoVfqOwMrC3q7d7ldNNZ9FZXPxyQs\nxswM/Q4RxMm99KMvKQXvr0K96GJNup9Xo/xh0Ra31ijvUF/MR4nJ4yEN7MxZHW9ouu/MkPkITwvn\nJqZnd2I6nhF7p72ZNlyfPq8o0pEyNog2ObdK2TVia/QoPm6ArTbRvltEu9bL7+l+UF6FAbo2ht2d\nZI8VgdgsRtku0Uj75bBzFEbW41g/M1/8npeLdqSCVcKvo8ueHYBv8aPseNYT83tEGu38smft8u/x\nZibZ27oTHIsFWJcUFmWL/8ccXcfstdg/p15P2VxmL8+1tAc2pibdz3BIrz1uLPfbc289T2O3LeeI\n7cUDFc/b5e94x4i26hQr4GwcX01woa7G2ohTcjo5vUxvZE6d3vA6Pq/jqgxed5RSSZs0Z+7ycuHf\nvPR9JP7E2xqT9mnDF/gUgyrK2uXveHATftPVP0bXEjwQV4jl8ztVTiQVXCeW5B9SxY/ndKhZmaZr\n4B1RsC+1OFjEfFX6vlIsiWc2qP6h8q8mCzPqKQ2QNWIS2zeP8aVJ6dQMmcvESNuIw8Wy1Kl/Zr2+\n4A7xmz/AYQX70h2bRGpjgvD5sQbWPRhP1rg2JHur0/drM+pZkGQvqcf47KR0UY3yC8QU+rXYsMLV\nSef5nDaa6XBRSpivl39P16G4dNATyfYO/CS/z72Nebv8S+2SJDuisiArndKZIXM6lov3mWPEMku8\nWlovluoLczg2R8ySV+aQ7Usm6TrBrRYHi/aKa3IVvVJsisjxrU33IZiFX3Lq9WfMa8anLUNpV43n\nI/BKKr9UvEYpZxZeE69WaiU5m40T0n2g2ONVY5WY4co5Tcw4RaRbvkn3dXiqAPv1UKsvVaWUgyl6\nNmpWhooZst4Tc6N4Mdk/uyD7eXhB9KEj61Ean5SWi5e8rb8G7c44kZkvIt1SOlA8UoDtPAwSecDt\n6aqr7wwWp9Xyo3Prj6DFcZxYhRaLPwF8ou8T9T2h3e595u5qQll7vJ04S/wrYZTYxG5tqIst6mGs\nOBhsE0vYNJFVaDbeFIeJn/EOPizUmxYtWrRo0eL/yb+ZRCxsApjuzAAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$$\\left \\{ x : -2, \\quad y : 4\\right \\}$$"
      ],
      "text/plain": [
       "{x: -2, y: 4}"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.solve((x + y - 2, 2 * x + y), (x, y))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{y: False, x: False}"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.satisfiable((~x | y) & (~y | x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "f, g = sym.symbols('f g', cls=sym.Function)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAACMAAAAVCAYAAADM+lfpAAAABHNCSVQICAgIfAhkiAAAAiZJREFU\nSIntlU9IVFEUxn8qmJOWKxdFrTLTRUl/CBRdJQQtrY0rC2lT1qJFkptcBA1pGzeBK3GTQVEgQcw2\ng/5RkJC4KGpRE9OiaNFQo9XifMPMXO+9T2ZWgR883r3nO+e875537r3wH2A7MA18AH4Df4ExcXNA\nDmiuMvdh5RvZaMCCAh4C14AJoAs4AvwBLlUppIj7QBZoSXLslJBHHi4DfAdSNYo5qm+MJzmek+NZ\nx96BVWWmRiFFLAMfgQYfeVIifE8nkNb4mCc2I27QsdcBs+LSDndV9uM+Mb1Yb+SAgsYTCmoAXgKr\n+Bu3G1gD3lK50pv6oK+aA+KmfGJQop/AG8feLCFLoUBKFTit+bjmd4B6j3+r+OehhPvlMOvYO2TP\nRMTsAvLYcTBKaRM0RmLywJcQOawkFx17D6VVxnCdUp89AbYm+H/CKg6sL98hvV879rzeTQnJv5aN\nR7BfHkOqLPc6PMa27zbHvhNb7WIk8ZBis/K9lSCkXv7vfGQd8ANYCXA5KldejhPYtbEEtGFnSAE7\nEkLokuh7PnKfyPlA8F3x7Y69D/sd74Edsp2S74OImDPyGfWRQyIvB4KL/PkyWzd2PWSBPY7/C/n3\nB/Ldxpp3t4+cVPBAILgR24bPNG/X/BtwwONfPNSeerhWrHFjlUvEFX3gYC1JgAvEq7YhNGGX20IN\nOVLAZ6wHK+C9MSNYBV4BW7C7qlCFmL3AL+AG1m+bSMQ/jk6QTOyk7vsAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$$f{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "f(x)"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHkAAAAmCAYAAADgIjRrAAAABHNCSVQICAgIfAhkiAAABI9JREFU\neJzt2luoFVUcx/HP0TLNzCgqiswg8fKgJ9OExC6UZBQVdCEkwh3SS1kPEV3sIYlAoYLsJTQI68WK\nokCiMIjoRpmRFygiCi3KsgcrKCu7Pax1OOO498w5e82cfbT5wmbP/Nda//nv36w96zJ/GhoawBS8\nhU+xHdf2NJqGWjgN/fH4FHyDY3sXTkOVrMBnbew7cOYIx9I1Y3odwCinH9tytvk4Wvg3NxwBbMG9\nmfOThHF5YW/CaUhlBt7E79iJBfgNS2L5MXgbN/ckuho4Hk9gF/7EvwZ79LPYi4ld+p4X/S1PC7FS\npuNnrMU0XIndQpynog8bsSrhGnVqShe6booNXsXDwo+bJYxH/+CuhGDgZezBcYl+quIN4SZmeVqI\nERYJv3tb5jN7mNeoW1OGoevMGMzrbco24ydMSAxmQbzGykQ/VTBFiOW8nH09XqvoGiOhKcPQ9bZY\n8dacfbrQ49ZXEAxhabIbY7ts3xLivDgxjqvxF8bl7B9jdaLvAUZKU0p0vS4G0u4zE2vi8aVt2m6O\nZfmdoD5siGVrcmUPRvsS3dFSzU2+KvqZlLFdFG03JvpO0ZQadF0ojBN7cSAer4qNxmKr0OPbTQ76\n8bewvMj2oMfiBdv11MWx7NF2wQyBlmpu8unCjHodznbwpGtGou8UTalJ17HCsmFHzj4xBrOzU0OD\nPasVz1fG8+e133SZHMu3FPgsoqWamww34WvsE/aoH8KvqtksStGUGnSdHStsyNmnR/vmgmDOwH5h\nibDC4EQjP9Zl2Y/vC8qLaKnuJtdJiqbUoOuy6OTOnP18g72niNUGx5z3lG/ifyv05jJ2OXRMK/ps\nGILPkSJVUxJ1PSpXeG78/iRn3x+/x5c4/zFzvFx4TBUxIeO7iMdxQs52Dq7BM0InyJLfb+4lqZpS\nsa7vCFP6STn76UIverfA8dLYdk+s+2RJIGNi/S9L6nWi5fB4XKdoSsW69uEXfN6hbK+De1SWK4St\nup04WVirHRCWCZ2YFYN+qSToTrR0d5OH89hP+ZCmKTXoOiMWPteh8YuxfFrOvkh4fHwlvFyH62Pd\nVwqCuSXWWVFQp4iW3v2Th5op0q2m1KTr0lh4T4fGA+W3Z2z9wpbcHmGNmeWjWP+CDv42CpODKQUB\nF9HSu5s81EyRbjSlRl0fiY0Xd2g8TpiWfxjPp8XzfZjTpv7AovyDNmWThYlBUY8so6X6m9wpE6SM\nTpkiw9WU3uvq/niBuSlOcIfi3tgrnnLo26gy5gsdo6/La1alKRXpOl7Y8tuU4GMCvhPGo9FGPhOk\njCoyRarQlIp1vVDYe+32BfcsYf/2rCqCSaAoE+QG/IGpmfpr8YUwy6XaTJFUTRk9uo4ahpIJslV4\nfMPd+MHgJKiKTJGGminLBIHLhDXpfcJad36mrIpMkYYaGU4myPvCcuTyEYirNv6PeddzhXe023P2\neQ7e875EWK+OEXamGg4jhpIJMrAZsUxYc1aV69UwQpRlgkwVXtU9EOvPEcbf0bambyihUybIicLG\nxrpc/ReUvy1qaGhoaGhoaGhoaDji+Q+cz8Bh6S81TAAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$$f{\\left (x \\right )} + \\frac{d^{2}}{d x^{2}}  f{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "         2      \n",
       "        d       \n",
       "f(x) + ---(f(x))\n",
       "         2      \n",
       "       dx       "
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f(x).diff(x, x) + f(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nGTJkyHBG4H+Rsxp49s8V7wAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$$f{\\left (x \\right )} = C_{1} \\sin{\\left (x \\right )} + C_{2} \\cos{\\left (x \\right )}$$"
      ],
      "text/plain": [
       "f(x) = C1*sin(x) + C2*cos(x)"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.dsolve(f(x).diff(x, x) + f(x), f(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIwAAAAjCAYAAABGiuIFAAAABHNCSVQICAgIfAhkiAAABHFJREFU\neJztmm2IFVUYx3+7G760kaIIBplB2+YiuqYWaC/cSiqCvpRW+8VNpA+pqYVo2QeXKDIqIulDLxBD\nFpUYRSLKshGE77YUBUWkuYlvreBb6qZb2Yf/ud3Z48zcuS9z7+zd84NhZp7nzDnPvfPMOc95zgGH\nw1GTtAIfAYeAv4ADwHpgciWNqK9kY46imQ90AxeAR4FmIwNYWi2jHOlkNvA38HSIfkwFbXEMAvYA\n31TbCMfgYBJwCQ1D+fgSOAlsTNKgsBjmamAd0ANcREavMroPgF6gscg2Z5j6Fhb5/FBimjl3xyj7\nBrm4puJsQi91M/Ai0AG0ADOBf4FnSqz/c+AocFWJ9dQ6C9B7GB+zfIaEe5ggst3g1gBdJ3AKGFli\nG7eaNlaXWE+tcwv6nx4J0V9p3WeogsMsQkY+YcmbUe/ybpna+Rn4HWgoU321ymYUAjwO3Ag0oZjm\nK2CWVTZDBR3mYeQoQcckYK25vifg2U6je8iS1wGe0a21dGuM/L6yWF+7DAdWAj8A51Bg2w28AIyw\nymaooMPMRrFKL9BvrjvQi20AvkX5gKBgtxX4B/iJgT3G68gpgnqlOUb3Whlsd4gMCTtMnXXfAPwJ\n7AOm+uSNwGk0jEwJqcsD2lGg5qH45CVgA9CGhjM/o1A8tBfFNFEsB0bnKePne+CLAsrXAl3ow20E\nTgDzgJ1JNzoFffWeJW828s6IZ68F+tBUfAm5wHlYxDN9wLEYdvUQPlwGHbb9joRoR3+4vT4xy8g/\nzfP8y+Re2nYuj+JtDqNhrtr0UJhDflgVK1PAFdb9dHP+zpL3mbMdZNkc910vBM7nKT/SV3c12Y9W\ngONyJClD0k6Qw1xCMYCfXnMeG1FXGwpgj6FE0zLgyYjy9SguORDDzqRjmKCZnyMPdcAZ4JcQXS8D\nexA/D6AlhB+BcSg47kfT8TBakHN+FsO2HgZPDFOInYPx+J+bjOCTkD9io9E3WfLb0dDzG3CNkc01\nZaO+8mzae0lEGUeKaUMvcGUe/WKfrBVNjY8CN1jl95ryd4TU9zEKeCcUaW8tkopddXF5Fb3gOSH6\nYSg+2W3um8z9SQbmbLJkE3O7AnSjULA71HIlUcxHH9D7wG3AdehjWw+8U0K9HkrAVoXnkBPcXGI9\nTxHd+ww1ktxV5xHPYeahLaATfbI3gV9RXFoUI9CC4aZiK0BT6SNUYVU1xSS5q84jnsPUoeWf98z9\nCuAPLg81CuZOtL5U7AaqFvQDri/VkBoh6V11HvGHpHvR7PZZNGOeWUA7jhLoIP/0NGPKPkbw7DOI\nu4AHiXaY1cBZ39GPUh5+WVQosAMNj/cHKe3EnaM8vEV4eiLLQXPObkY7G6Per8k5WhhvowXfLK+g\nJZh1PtnhkGfvRjO1enLJWkfKSHpXnUe8ISmbImlHs9ctBbThqDBJ7qrzyO8wE1Gv87y5n4q2o7hZ\nbEpJcledR7TDjEFLOXauZwOwrYB2HCklg0tJOGLShRaAz6PlA3u4cjgcDofD4XAE8B/gbmtLUiet\nwAAAAABJRU5ErkJggg==\n",
      "text/latex": [
       "$$f{\\left (x \\right )} = - \\frac{C_{1}}{- C_{1} + x}$$"
      ],
      "text/plain": [
       "         -C1  \n",
       "f(x) = -------\n",
       "       -C1 + x"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.dsolve(x * f(x).diff(x) + f(x) - f(x) ** 2, f(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIgAAAAiCAYAAACEPZHaAAAABHNCSVQICAgIfAhkiAAABSBJREFU\neJztm2tsFFUUx39tDVIgoihRExUTa6XRtopoBIVslAj6xQRB7RcLgh/U+kzjo36AGI01aAjED76z\nYoxKahQbolSJiRGiohEfkfiI1kQE6wMfSJWq9cP/Tnr3Mq/d2e3utvNLNp05986Zc2fO3HvuubeQ\nkpJSkcwHeoHvgWFgSXnN8ae23AaMYyYDHwEd5TYkpfKpuh7kCGA90A8cRA24w5RtAAbQF1AIZxt9\nKwq8PqUC6EUvcTNwL7AaaAJmA/8BtyXU/xKwB5iSUM9YoWJ7ED9mIoNf8ynrA34F6hPe41xzj66E\nesYKVeUg1yODr3Xkjaj3eKxI99kFfAvUFUlfNVMVDnI5MtTvNxPoNscX+VzbZ8oWO/IaIGvKup2y\nVUa+sCjWVzdV4SBzUawxAAyZ49XoRdYB7wP/4B+ctgL/Ap+R2yM8hBrv1+ssMGUPFsH2amQKcKb5\nDQOd5vikchrlUuOc1wF/AF8BLZZ8MvAbGhaaA3RlgXZguTnuAu4DNgJtaHiymYrimR0oJgnjFuDI\niDo2O4GX86hfDjLAmz7yp4Flo2pJHjQjb8468kYj7wu59gRgEE2NOxgJdCeEXDMI7I1hVz/Bw5/f\nz7U/pUi0owd8kyOfY+QvRFx/PyMvaRswKaL+bjRspVQobqJslvn7oSMfNH8nRuj70TpeARyIqF9v\n6U6pQA5zzmehr3+nIx8wf48O0dWGAs69wHHAzcB1IfVrUVzxTQw7ixmDDOehJ8WiBvgd+DygbIDc\nHsLmUpSS/wSYjoLZITQ9DqIJvawXY9jWTxqDlJ3T0MN9PqC8x5Q3OPIL0FDyNXC8kS0xdcNmEstN\nnUpdzTwK+AE4pdyGjBI9RCyhtKEXdntE+Q2WrBVNVfdw6IPcYerPC9D3HApQTwwzqoysQVNOl1bg\nWeA74C80RD4DnD5KduWzj+QJYG1MvS3ALyj94Msac8MFAeUTUHzxrjlvMOf7yM2ZeHiJsHd8yqai\n4LRScxWTkOO7zn01cuqngPNRUmsecpBHE9wvi5KScbgELaAuJtxBatH7yeRhxwfkdgB5c5cx6qwk\nSoAbCe9dSs1S4G9ghiVbB3yJYqil6GuyE4lzkXPcGqBzWgJ7ssR3EJswB5kD/IwmIlHt9ViF0hMF\nMxEtsPUm0FGPuseeJIYkpAYtHTxuzjvJjTfWAa8717wHvFUie7IU30G60d4diG6vxyI02Ui0Wj8f\neVqhG4aa0MM4OYkRReBiNNO6E83eZltlm8iNP7wtEFeWyJYsxXeQXeQunoa116PF6BwvgXkk29Gw\nsciRbyE3prgK/xmcH6+guCysh+wC9lu/IfTl2rI4w2+QgzSiGM/9iIPa63Gq0XmGJ3ATZeOJC9GM\npJaRRKDHT2ia6+F1uftj6F2LuvL2kDqPoEVMjwfQssN6S7Y7xr2CuAzYCvxpycLa6+HFUUH5rnGD\nNz1vRzOpV53yTuBT6/wc9GVdEaDPXXPKkF+MlaW4Q8zbwErrPKq9HitJ5phjghnoIdxtzlvQVgS7\nS29G+1uOsWSb0Ze3DHXFDSgm2YpmDDYZSucgUftIpqMh61hzHqe9HhuAJ/Owe8wxDQVvbs5iI/rq\nbLaTm+U9HCURP0Zd9z6UN7iHQxcxM5TOQTKELy9cY2yH/Npbj4LX8+IaPd5ZCHxBYXtmM5RvGr+J\n4Gx4GB347PdJ/7MumC3Aw2gjVDWxDS1j5MtBlMBMKTFvoFnAAbRe48YnKSkpKSkpKSkpEfwPKUhd\nRN4cXboAAAAASUVORK5CYII=\n",
      "text/latex": [
       "$$f{\\left (x \\right )} = \\frac{1}{x \\left(C_{1} + \\frac{1}{x}\\right)}$$"
      ],
      "text/plain": [
       "           1     \n",
       "f(x) = ----------\n",
       "         /     1\\\n",
       "       x*|C1 + -|\n",
       "         \\     x/"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sym.dsolve(x * f(x).diff(x) + f(x) - f(x) ** 2, f(x), hint='Bernoulli')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
